package repo

import (
	"astgram/dal/po"
	"github.com/jinzhu/gorm"
)

type UserRepo struct {
	db *gorm.DB
}

func (r *UserRepo) Create(user *po.User) error {
	sql := r.db.Model(&po.User{})
	return sql.Omit("id").Create(user).Error
}

type GetUserQuery struct {
	ID       int64  `json:"id"`
	Username string `json:"username"`
	Pwd      string `json:"pwd"`
}

func (r *UserRepo) GetUser(q GetUserQuery) (*po.User, error) {
	var userPos []*po.User
	sql := r.db.Model(&po.User{})
	if q.ID != 0 {
		sql = sql.Where("id = ?", q.ID)
	}
	if q.Username != "" {
		sql = sql.Where("username = ?", q.Username)
	}
	if q.Pwd != "" {
		sql = sql.Where("pwd = ?", q.Pwd)
	}
	err := sql.Find(&userPos).Error
	if err != nil {
		return nil, err
	}
	if len(userPos) == 0 {
		return nil, nil
	}
	return userPos[0], nil
}

func NewUserRepo() *UserRepo {
	return &UserRepo{
		db: GetDB().Debug(),
	}
}
